{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import seaborn as sns\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "from sklearn.mixture import GaussianMixture\n",
    "\n",
    "np.random.seed(1234)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 创建模拟数据\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "c = [\n",
    "    (0, 0.5),\n",
    "    (1, 1.5),\n",
    "    (2, 2.5)\n",
    "]\n",
    "d = np.random.randn(5000, 1)\n",
    "d = np.vstack([i + d * j for i, j in c])\n",
    "real_labels = np.repeat([0, 1, 2], 5000)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 展示模拟数据的真实分布"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, axes = plt.subplots(1, 2, figsize=(10, 4), sharey=True, tight_layout=True)\n",
    "sns.histplot(x=d[:, 0], stat=\"probability\", ax=axes[0])\n",
    "sns.histplot(x=d[:, 0], hue=real_labels, stat=\"probability\", ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "  Iteration 10\n",
      "  Iteration 20\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Initialization 0\n",
      "Initialization converged: True\n",
      "Best n_components = 4\n",
      "Lowest BIC = 58244.57355406914\n",
      "Lowest AIC = 58141.58130019241\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "bic = []\n",
    "aic = []\n",
    "\n",
    "lowest_bic = np.inf\n",
    "lowest_aic = np.inf\n",
    "best_n_components = 0\n",
    "\n",
    "n_components_range = range(1, 11)\n",
    "\n",
    "for n_components in n_components_range:\n",
    "    gmm = GaussianMixture(n_components, covariance_type=\"full\", max_iter=1000, verbose=True)\n",
    "    gmm.fit(d)\n",
    "    tmp_bic = gmm.bic(d)\n",
    "    tmp_aic = gmm.aic(d)\n",
    "    bic.append(tmp_bic)\n",
    "    aic.append(tmp_aic)\n",
    "\n",
    "    if tmp_bic < lowest_bic:\n",
    "        lowest_bic = tmp_bic\n",
    "        best_n_components = n_components\n",
    "    if tmp_aic < lowest_aic:\n",
    "        lowest_aic = tmp_aic\n",
    "\n",
    "print(f\"Best n_components = {best_n_components}\")\n",
    "print(f\"Lowest BIC = {lowest_bic}\")\n",
    "print(f\"Lowest AIC = {lowest_aic}\")\n",
    "\n",
    "sns.lineplot(data=pd.DataFrame({\"BIC\": bic, \"AIC\": aic}, index=n_components_range))\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "检查如果指定 n_components = 3, GMM 建模出来的参数是什么情况"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Initialization 0\n",
      "Initialization converged: True\n",
      "[[0.05226576]\n",
      " [2.17310641]\n",
      " [4.38019431]]\n",
      "[[[1.17192048]]\n",
      "\n",
      " [[1.55169275]]\n",
      "\n",
      " [[3.10736815]]]\n"
     ]
    }
   ],
   "source": [
    "gmm = GaussianMixture(n_components=3, max_iter=1000, verbose=True)\n",
    "gmm.fit(d)\n",
    "\n",
    "print(gmm.means_)\n",
    "print(gmm.covariances_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[[1.08255276]],\n",
       "\n",
       "       [[1.2456696 ]],\n",
       "\n",
       "       [[1.76277286]]])"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.sqrt(gmm.covariances_)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x288 with 2 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "sample_d, predict_labels = gmm.sample(d.shape[0])\n",
    "\n",
    "fig, axes = plt.subplots(1, 2, figsize=(10, 4), sharey=True, tight_layout=True)\n",
    "sns.histplot(x=sample_d[:, 0], stat=\"probability\", ax=axes[0])\n",
    "sns.histplot(x=sample_d[:, 0], hue=predict_labels, stat=\"probability\", ax=axes[1])\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "interpreter": {
   "hash": "a73b08901f75b925a4f85781affcc0a41f578718b48347f28aab41682232bcfa"
  },
  "kernelspec": {
   "display_name": "Python 3.8.12 ('py38')",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.12"
  },
  "orig_nbformat": 4
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
